const ARR_METHODS = [
  'posh',
  'pop',
  'shift',
  'unshift',
  'splice',
  'sort',
  'reverse'
];

const originArrMethods = Array.prototype,
      newArrMethods = Object.create(originArrMethods);

ARR_METHODS.map((method) => {
  newArrMethods[method] = function (...args) {
          // _args = [].slice.call(arguments),
          // console.log(this);
          // 保留原有操作并新增额外的操作
    const result = originArrMethods[method].apply(this, args),
          ob = this.__ob__; // 从this中拿到 observeArr方法

    let newArr;

    switch (method) {
      case 'push':
      case 'unshift':
        // console('新的数组数据', _args);
        newArr = args;
        break;
      case 'splice':
        newArr = args.slice(2); // 拿到第二个参数之后的所有参数
        break;
      default:
        break;
    }
    
    newArr && ob.observeArr(newArr);

    return result;
  }
})


export {
  newArrMethods
}